Software products may require substantial infrastructure to operate. For example, when a user interacts with a web application, the behavior of the web application may depend not only upon software executed at the user's computer, but may also depend upon external hardware. Such external hardware may extend the functionality of the user's computer, for example, by providing additional data storage, computational throughput, and/or access to network resources. There are at least two approaches a purveyor of software (e.g., an individual software developer or an organization) may use to provide the infrastructure required to deliver a software product. In a first approach, requisite infrastructure is managed “in-house,” by directly configuring physical hardware to provide the infrastructure. For example, if a software product requires additional data storage, the purveyor of software may purchase and physically install a server system including suitable storage devices, and install software to the server system (e.g., a file server program) to provide the required infrastructure. However, this approach requires the purveyor of software to manage every aspect of the infrastructure, including housing physical devices in an appropriate location, managing power usage of the physical devices, installing software to the physical devices, diagnosing problems with the hardware and software, and administering repairs or replacements for failing hardware. These responsibilities may present a large financial and administrative burden to the purveyor of software. Moreover, such “in-house” management may require extensive expertise with hardware and software systems outside of the usual experience of software developers of the software product.
Purveyors of software alternatively may use a second approach in which requisite infrastructure is not managed by the purveyor of software directly. Instead, the purveyor of software may utilize a cloud infrastructure offering (e.g., a service provided by AMAZON WEB SERVICES™ or GOOGLE COMPUTE PLATFORM™) to provide the needed infrastructure. Cloud infrastructure offerings allow a purveyor of software to utilize infrastructure such as virtual machines and related resources provided by physical devices, without requiring the purveyor of software to administrate the physical devices “in-house”. Instead, the cloud infrastructure offering manages the physical devices and provides the purveyor of software with a means to “provision” infrastructure functionality.
This second approach frees the purveyor of software from some of the burden of managing physical hardware “in-house.” However, provisioning infrastructure for a software product may require significant specific expertise with the specific infrastructure being offered by a cloud infrastructure offering. This specific expertise may be outside of the usual experience of software developers of the software product. As such, just as with the first approach, managing infrastructure of a software product may present a significant burden to a purveyor of software.